/*
 * Copyright (C) 2012 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package interactivespaces.domain.basic;

import java.io.Serializable;

/**
 * An activity installed in an {@link LiveActivityGroup}.
 *
 * @author Keith M. Hughes
 */
public interface GroupLiveActivity extends Serializable {
	/**
	 * Get the activity group this activity is part of.
	 * 
	 * @return
	 */
	LiveActivityGroup getActivityGroup();

	/**
	 * Set the activity group this activity is part of.
	 * 
	 * @param activityGroup.
	 */
	void setActivityGroup(LiveActivityGroup activityGroup);

	/**
	 * Get the activity this represents.
	 * 
	 * @return
	 */
	LiveActivity getActivity();
	
	/**
	 * Set the activity this represents.
	 * 
	 * @param activity
	 */
	void setActivity(LiveActivity activity);

	/**
	 * Get the dependency status of the activity in its containing activity group.
	 * 
	 * @return
	 */
	GroupLiveActivityDependency getDependency();
	
	/**
	 * Set the dependency status of the activity in its containing activity group.
	 * 
	 * @param dependency
	 */
	void setDependency(GroupLiveActivityDependency dependency);
	
	public enum GroupLiveActivityDependency {
		REQUIRED("activity.group.activity.dependency.required"),
		OPTIONAL("activity.group.activity.dependency.optional");
		
		/**
		 * Message ID for the description.
		 */
		private String description;
		
		GroupLiveActivityDependency(String description) {
			this.description = description;
		}

		/**
		 * @return the description
		 */
		public String getDescription() {
			return description;
		}
	}
}
